// 给定一个非负整数数组nums ，你最初位于数组的 第一个下标 。
//
// 数组中的每个元素代表你在该位置可以跳跃的最大长度。
//
// 判断你是否能够到达最后一个下标。
// dp 实现
function canJump(nums) {
    let n = nums.length
    let dp = new Array(n)
    dp[0] = true
    for(let i = 1 ; i<n;i++){
        dp[i] = false
        for(let j = 0 ; j<i;j++){
            if (dp[j]&&j+nums[j]>=i){
                dp[i] = true
                break
            }
        }
    }
    return dp[n-1]
}

// 贪心 最远能不能跳到最大的标
function canJumpTwo(nums){
    let n = nums.length;
    let reach = 0;
    for (let i = 0; i < n; i++) {

        if (i > reach || reach >= n-1)  {
            break;
        }
        reach = Math.max(reach, i + nums[i]);
    }
    return reach >= n-1
}